import {
  _decorator,
  Component,
  Sprite,
  SpriteFrame,
  resources,
  Node,
  ImageAsset,
  Texture2D,
  Color,
  Size,
  UITransform,
} from 'cc'
const { ccclass, property } = _decorator

// 测试动态加载图片

@ccclass('AddImage')
export class AddImage extends Component {
  start() {
    console.dir(this.node)
    this.addImageToNode()
  }

  async addImageToNode() {
    // 创建一个新的 Sprite 节点
    const spriteNode = new Node('AddImageToNode')
    // const sprite = spriteNode.addComponent(Sprite)
    const imgUrl = 'picture/logo'

    const imageAsset = await this.loadImageAsset(imgUrl)
    this.processImageAsset(imageAsset)

    // 将 Sprite 节点添加到当前节点的子节点中
    this.node.addChild(spriteNode)
  }

  // 第一个函数：使用Promise加载图片资源
  loadImageAsset(imgUrl: string): Promise<ImageAsset> {
    return new Promise((resolve, reject) => {
      resources.load(imgUrl, ImageAsset, (err, imageAsset: ImageAsset) => {
        if (err) {
          console.error(`Failed to load image asset at path '${imgUrl}':`, err)
          reject(err)
        } else {
          resolve(imageAsset)
        }
      })
    })
  }

  // 加载的是png文件，所以得到的类型应该是ImageAsset.因此需从ImageAsset到texture到SpriteFrame的转换
  // 第二个函数：处理图片资源的后续操作
  processImageAsset(imageAsset: ImageAsset) {
    // 创建 Texture2D 对象
    const texture = new Texture2D()
    texture.image = imageAsset

    // 创建 SpriteFrame 并设置 Texture2D
    const spriteFrame = new SpriteFrame()
    spriteFrame.texture = texture

    // 获取当前节点的 Sprite 组件
    const sprite = this.getComponent(Sprite)
    if (!sprite) {
      console.error('Sprite component not found on the node')
      return
    }

    // 设置 SpriteFrame
    sprite.spriteFrame = spriteFrame

    const newColor = new Color(255, 255, 255) // White
    sprite.color = newColor

    const transform = this.getComponent(UITransform)
    // 设置内容大小
    transform.setContentSize(100, 100)
  }
}
